
// 导入模块
import Request from 'luch-request'
import { BASE_URL, WHITE_LIST } from './constant'
import { useUserStore } from '@/store/user'


// 2.实例化网络请求
const request = new Request({
  // 接口基地址
  baseURL:BASE_URL,
  custom:{
    loading:true
  }
})

// 3.配置请求拦截器
request.interceptors.request.use(
  (config)=>{
    if(config.custom?.loading===true){
      uni.showLoading({title:'加载中...',mask:true})
    }
     // 3.1 判断是否有token, 而且请求的接口地址不在白名单中
     const store = useUserStore()
     if(store.token && !WHITE_LIST.includes(config.url as string)){
        config.header!.Authorization = `Bearer ${store.token}`
     }
    return config
  },
  (error)=>{
    Promise.reject(error)
  }
)

// 4.配置响应拦截器
request.interceptors.response.use(
  (res)=>{
    // 关闭弹窗
    uni.hideLoading()
    if(res.data.code !== 10000){
      uni.showToast({
        title: res.data.message,
        icon: 'none'
      })
      return Promise.reject(res.data)
    }
    return res.data?.data
  },
  (err)=>{
    // 关闭弹窗
    uni.hideLoading()
    uni.showToast({
      title: err.data.message,
      icon: 'none'
    })
    Promise.reject(err)
    // 判断token过期情况
    if(err.statusCode===401){
      uni.reLaunch({url:'/pages/login/index'})
    }
  }
)

// 导出配置好的模网络模块
export { request }